<?php
/**
 * 管理后台认证类
 * 处理管理员登录、权限验证等功能
 */

require_once __DIR__ . '/../include/Database.php';

class AdminAuth {
    private $db;
    private $userId = null;
    private $userData = null;
    
    /**
     * 构造函数
     */
    public function __construct() {
        $this->db = Database::getInstance();
        $this->initSession();
    }
    
    /**
     * 初始化会话
     */
    private function initSession() {
        if (session_status() === PHP_SESSION_NONE) {
            session_start();
        }
        
        // 检查管理员是否已登录
        if (isset($_SESSION['admin_user_id'])) {
            $this->userId = $_SESSION['admin_user_id'];
            $this->loadUserData();
        }
    }
    
    /**
     * 加载用户数据
     */
    private function loadUserData() {
        if ($this->userId) {
            $sql = "SELECT * FROM " . DB_PREFIX . "users WHERE id = ? AND role = 'admin'";
            $this->userData = $this->db->fetchRow($sql, [$this->userId]);
            
            // 如果用户不存在或不是管理员，注销会话
            if (!$this->userData) {
                $this->logout();
            }
        }
    }
    
    /**
     * 管理员登录
     * @param string $username 用户名
     * @param string $password 密码
     * @return bool 是否登录成功
     */
    public function login($username, $password) {
        // 查询管理员
        $sql = "SELECT * FROM " . DB_PREFIX . "users WHERE (username = ? OR email = ?) AND role = 'admin'";
        $user = $this->db->fetchRow($sql, [$username, $username]);
        
        // 验证密码
        if ($user && password_verify($password, $user['password'])) {
            // 登录成功，设置会话
            $_SESSION['admin_user_id'] = $user['id'];
            $_SESSION['admin_username'] = $user['username'];
            
            // 更新最后登录时间
            $this->db->update('users', 
                ['last_login' => date('Y-m-d H:i:s')], 
                'id = ?', 
                [$user['id']]
            );
            
            $this->userId = $user['id'];
            $this->userData = $user;
            
            return true;
        }
        
        return false;
    }
    
    /**
     * 管理员登出
     */
    public function logout() {
        // 清除会话数据
        unset($_SESSION['admin_user_id']);
        unset($_SESSION['admin_username']);
        
        $this->userId = null;
        $this->userData = null;
    }
    
    /**
     * 检查管理员是否已登录
     * @return bool 是否已登录
     */
    public function isLoggedIn() {
        return $this->userId !== null && $this->userData !== null;
    }
    
    /**
     * 获取当前管理员ID
     * @return int|null 用户ID或null
     */
    public function getUserId() {
        return $this->userId;
    }
    
    /**
     * 获取管理员数据
     * @return array|null 用户数据或null
     */
    public function getUserData() {
        return $this->userData;
    }
    
    /**
     * 验证管理员权限
     * 如果未登录，重定向到登录页面
     */
    public function requireLogin() {
        if (!$this->isLoggedIn()) {
            header('Location: login.php');
            exit;
        }
    }
} 